/*Copyright (C) 2009 - 2011 Careil Baptiste

This program is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.

You should have received a copy of the GNU Lesser General Public
License along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
#ifndef TYPES_FILES_HEADER
#define TYPES_FILES_HEADER

#define EMPTY_QUEUE 0

/*
** Contient un élément de la file.
** Structure interne.
*/

struct File {
	int data;

	struct File *next;
};

/*
** Définition de la file.
**
** Afin d'éviter d'éventuelle problème, il est conseillé d'instancier
** une file comme suit: File maFile = QUEUE_EMPTY;
*/

typedef struct File *File;

/*
** Permet d'ajouter un élément à la file.
**
** \parm file La file où ajouter l'élément.
** \parm data La valeur du nouvelle élément.
** \return 0 en cas de succès, une autre valeur en cas d'erreur.
*/
int File_Push(File *file, int data);

/*
** Permet d'enlever un élément à la file.
**
** \parm file La file où enlever l'élément.
** \return 0 en cas de succès, une autre valeur en cas d'erreur.
*/
int File_Pop(File *file);

/*
** Permet de savoir si la file est vide.
**
** \parm file La file à vérifier.
** \return 0 si la file contient des éléments, 0 si elle est vide.
*/
int File_Empty(const File file);

/*
** Permet de connaitre la valeur de l'élément en tête de file.
**
** \parm file La file à lire.
** \parm read Sera initialisé à valeur stockée en tête de pile.
** \return 0 en cas de succès, une autre valeur en cas d'erreur.
*/
int File_Front(File file, int *read);

/*
** Permet de vider la file. Il est nécessaire d'appeler cette
** fonction à la fin du bloc d'instruction.
**
** \parm file La file à vider.
*/
void File_Clear(File *file);

#endif
